/* 
 * cms，一个基于J2EE架构内容管理系统
 * Copyright © GrayRabbit Co., Ltd. All rights reserved.
 * Department:运营department
 * 更多信息请访问：
 * http://code.google.com/p/gray-rabbit-cms/
 */
package org.grayrabbit.cms.service.category;
 
import java.util.List;

import org.grayrabbit.cms.entity.Category;
import org.grayrabbit.cms.vo.category.CategoryBean;

import org.grayrabbit.dao.util.Page;
import org.grayrabbit.service.GenericService;

/**
 * <b>OperLog</b>的service接口

 * @version 1.0,创建时间: 2011-05-16 14:38:49 
 */
public interface CategoryService extends GenericService {
	/**
	 * 根据主键查询实体
	 * @param categoryId
	 * @return
	 */
	Category getCategory(String categoryId);
	/**
	 * 根据序号查询实体
	 * @param categoryId
	 * @return
	 */
	List<Category> findByOrd(Integer ord, CategoryBean categoryBean);
	/**
	 * 批量删除
	 * @param key
	 */
	void delete(String[] key);
	/**
	 * 删除实体
	 * @param category
	 */
	void delete(Category category);
	/**
	 * 保存实体
	 * @param category
	 */
	void save(Category category);
	
	/**
	 * 检查栏目名称唯一性
	 * @param role
	 * @return
	 */
	Boolean checkNameUnique(String categoryName,String parentId,String siteId,String catname);
	/**
	 * 检查简称名称唯一性
	 * @param role
	 * @return
	 */
	Boolean checksimpleunique(String categoryName,String siteId,String catoldSimpleName);
	/**
	 * 根据bean组装统计查询条件(名称参数)
	 * @param category
	 * @return
	 */
	Page<Category> getPage(CategoryBean categoryBean);
	/**
	 * 填充分页组件的查询：(名称参数)
	 * @param page
	 * @param categoryBean
	 */
	void list(Page<Category> page, CategoryBean categoryBean);
	public void listNumCount(Page<Category> page, CategoryBean categoryBean);
	
	/**
	 * 查询所有记录（bean参数）
	 * @param siteBean
	 * @return 
	 */
	List<Category> findALL( CategoryBean categoryBean);
	
	/**
	 * 根据父Id查询记录（参数parentId，bean）
	 * @param siteBean
	 * @return 
	 */
	List<Category> findByParentId(String parentId, CategoryBean categoryBean);
	/**
	 * 根据站点ID查询栏目
	 * @param siteId
	 * @return
	 */
	List<Category>findBySiteId(String siteId);
	/**
	 * 批量启用栏目
	 * @param keys
	 */
	void enable(String[] keys);
	/**
	 * 批量禁用栏目
	 * @param keys
	 */
	void disable(String[] keys);
	/**
	 * 查询全部记录列表
	 * @return
	 */
	List<Category>catList(String parentId,String siteId);
	/**
	 * 叶子接点栏目列表
	 * @return
	 */
	List<Category>tailEndList(String siteId);
	List<Category> allCatList(String siteId);
	
	
	public List<Category> ftlFindCat(String[] catIds,String[] siteIds);
	public List<Category> ftlFindSonCat(String catId);
	public Category findCatById(String catId);
	public Category ftlFindCatById(String catId);
	
	/**  注意：（方法与catUrlLeftTree几近相同 差异  ：属性isLink =true  加链接  false 不加链接，若有修改两方法需同时修改确保）  */
	public String ftlCatCrumbs(String catId,String type,String text,String cssClass);
	/**
	 * 通过栏目ID获取超链接的Href
	 * @param catId   <#--栏目ID name 二选一 id优先于name 有id name无效  必填   否则 抛出异常-->
	 * @param catName
	 * @param area		<#-- 依赖于 name ，name为空 area无效-->
	 * @param type	<#--index  list  二选一  必填   否则 抛出异常-->
	 * @return
	 */
	public String ftlCatHref(String catId,String catName,String area, String type) ;
	/**
	 * 根据站点ID获取栏目
	 * @param list
	 * @param cuttentCatIndex
	 * @param max
	 * @return
	 */
	List<String> findCatIdsBySiteId(List<String> siteIds, int cuttentCatIndex,int max);
	/**
	 * 获取栏目下的文章数
	 * @param list
	 * @return
	 */
	int countContentByCats(List<String> list);
	/**
	 * 获取栏目下增量的文章数
	 * @param list
	 * @return
	 */
	int countMoreContentByCats(List<String> list);
	public Category ftlFindCatInitUsableSons(String catId,int count);
	public  String[] ftlFindFamilyLine(String id);
	/*
	*查找栏目子节点
	*/
	public String findByCategoryChildIds(String id);
	/** 依据顶级栏目查找出所有的可以展示的子孙栏目*/
	public List<Category> ftlFindSonsByTopCatId(String catId,String[] hiddenIds);
	/** 栏目（ID） is否是 顶级栏目（topic）的子孙栏目     */
	public boolean ftlIsFamily(String id,String topId);
	/**
	 * 获取父路径
	 * @param obj
	 * @return
	 */
	String getParentPath(Category obj);
	
	/**  前台侧边栏栏目链接（方法与ftlCatCrumbs几近相同 差异  ：属性isLink =true  加链接  false 不加链接，若有修改两方法需同时修改确保）  */
	public String catUrlLeftTree(String catId,String type,String text,String cssClass);
	
	List<Category> ftlFindTopCategory(String siteid);
	/**
	 * 得到顶级栏目
	 * @param siteId
	 * @return
	 */
	List<Category> getTopCategory(String siteId);
	
	List<Category> ftlFindCategory(String siteid, String categoryid, long[] limit);
	/**根据叶子栏目id查找它的顶级栏目*/
	Category ftlFindTopParentCategory(String id);
	/**
	 * 通过站点Id得到顺序第一的栏目
	 */
	Category ftlFindHomeCategory(String siteId);
	
	public  Category loadCategory(final String categoryId);
	
}